﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Crosland.Automotriz.Core;
namespace Crosland.Automotriz.Data.Dao.Linq
{
    public class clsT_Ven_Metas_OficinaDAO
    {
        private AutomotrizEntities ContextoDeObjs = new AutomotrizEntities();

        public IEnumerable<Object> lista(int id, string anio,String strTipoMeta)
        {

            IEnumerable<Object> list = new List<Object>();
           
                if (strTipoMeta.ToUpper() == "IMPORTE")
                {

                    var q = from v in ContextoDeObjs.T_VEN_METAS_OFICINA
                            from t in ContextoDeObjs.TD_OFICINA_VENTA
                            where v.ID_OFI_VTA == t.ID_OFI_VTA && v.ID_UBIC_VEND_CAB == id && v.ANIO == anio
                            group v by new { v.ID_OFI_VTA, v.NroRuedas, t.DES_OFI_VTA } into g
                            select new
                            {
                                id_vendedor = g.Key.ID_OFI_VTA,
                                nro_ruedas = g.Key.NroRuedas,
                                nom_vendedor = g.Key.DES_OFI_VTA,
                                Ene = (g.Where(d => d.MES == "01").Sum(d => (Decimal?)d.IMP_META) ?? 0),
                                Feb = (g.Where(d => d.MES == "02").Sum(d => (Decimal?)d.IMP_META) ?? 0),
                                Mar = (g.Where(d => d.MES == "03").Sum(d => (Decimal?)d.IMP_META) ?? 0),
                                Abr = (g.Where(d => d.MES == "04").Sum(d => (Decimal?)d.IMP_META) ?? 0),
                                May = (g.Where(d => d.MES == "05").Sum(d => (Decimal?)d.IMP_META) ?? 0),
                                Jun = (g.Where(d => d.MES == "06").Sum(d => (Decimal?)d.IMP_META) ?? 0),
                                Jul = (g.Where(d => d.MES == "07").Sum(d => (Decimal?)d.IMP_META) ?? 0),
                                Ago = (g.Where(d => d.MES == "08").Sum(d => (Decimal?)d.IMP_META) ?? 0),
                                Sep = (g.Where(d => d.MES == "09").Sum(d => (Decimal?)d.IMP_META) ?? 0),
                                Oct = (g.Where(d => d.MES == "10").Sum(d => (Decimal?)d.IMP_META) ?? 0),
                                Nov = (g.Where(d => d.MES == "11").Sum(d => (Decimal?)d.IMP_META) ?? 0),
                                Dic = (g.Where(d => d.MES == "12").Sum(d => (Decimal?)d.IMP_META) ?? 0),
                            };
                    list = q.ToList();


                }
                else { 

                var q = from v in ContextoDeObjs.T_VEN_METAS_OFICINA
                        from t in ContextoDeObjs.TD_OFICINA_VENTA
                        where v.ID_OFI_VTA == t.ID_OFI_VTA && v.ID_UBIC_VEND_CAB == id && v.ANIO == anio
                        group v by new { v.ID_OFI_VTA, v.NroRuedas,t.DES_OFI_VTA } into g
                        select new
                        {
                            id_vendedor = g.Key.ID_OFI_VTA,
                            nro_ruedas = g.Key.NroRuedas,
                            nom_vendedor =g.Key.DES_OFI_VTA,
                            Ene = (g.Where(d => d.MES == "01").Sum(d => (Int32?)d.CANT) ?? 0),
                            Feb = (g.Where(d => d.MES == "02").Sum(d => (Int32?)d.CANT) ?? 0),
                            Mar = (g.Where(d => d.MES == "03").Sum(d => (Int32?)d.CANT) ?? 0),
                            Abr = (g.Where(d => d.MES == "04").Sum(d => (Int32?)d.CANT) ?? 0),
                            May = (g.Where(d => d.MES == "05").Sum(d => (Int32?)d.CANT) ?? 0),
                            Jun = (g.Where(d => d.MES == "06").Sum(d => (Int32?)d.CANT) ?? 0),
                            Jul = (g.Where(d => d.MES == "07").Sum(d => (Int32?)d.CANT) ?? 0),
                            Ago = (g.Where(d => d.MES == "08").Sum(d => (Int32?)d.CANT) ?? 0),
                            Sep = (g.Where(d => d.MES == "09").Sum(d => (Int32?)d.CANT) ?? 0),
                            Oct = (g.Where(d => d.MES == "10").Sum(d => (Int32?)d.CANT) ?? 0),
                            Nov = (g.Where(d => d.MES == "11").Sum(d => (Int32?)d.CANT) ?? 0),
                            Dic = (g.Where(d => d.MES == "12").Sum(d => (Int32?)d.CANT) ?? 0),
                        };
                list = q.ToList();
                
            }
            

            return list;


        }



        public IEnumerable<Object> listaOficina(int idCabOfi) {

            IEnumerable<Object> list = new List<Object>();

            try
            {
                var q = from o in ContextoDeObjs.T_VEN_METAS_OFICINA
                        where o.ID_UBIC_VEND_CAB == idCabOfi
                        select new
                        {
                            o.ID_UBIC_VEND_CAB,
                            o.ID_OFI_VTA,
                            o.ID_CANAL_DISTRIB,
                            o.ANIO,
                            o.MES,
                            o.ID_GRUPO_ARTICULO,
                            o.NroRuedas,
                            o.CANT                       
                            };

                list = q.ToList();

            }
            catch (Exception)
            {}

            return list;
        }


        public List<Globales.lista_Metas_Oficina> listaOficinaMetas(int idCabOfi, string anio, string mes)
        {

            List<Globales.lista_Metas_Oficina> lista = new List<Globales.lista_Metas_Oficina>();

                var q = from o in ContextoDeObjs.T_VEN_METAS_OFICINA
                        join m in ContextoDeObjs.T_MAE_MONEDA on o.ID_MONEDA equals m.ID_MONEDA into mG
                        from of in ContextoDeObjs.TD_OFICINA_VENTA
                        from gr in ContextoDeObjs.TD_GRUPO_ARTICULO
                        where o.ID_OFI_VTA == of.ID_OFI_VTA && o.ID_GRUPO_ARTICULO == gr.ID_GRUPO_ARTICULO  && o.ID_UBIC_VEND_CAB == idCabOfi 
                        && o.ANIO == anio && o.MES == mes
                        from m in mG.DefaultIfEmpty()
                        select new
                        {
                            ID_UBIC_VEND_CAB = o.ID_UBIC_VEND_CAB,
                            NOM_OFICINA = of.DES_OFI_VTA,
                            ID_OFI_VTA = o.ID_OFI_VTA,
                            ID_CANAL_DISTRIB = o.ID_CANAL_DISTRIB,
                            ANIO= o.ANIO,
                            MES = o.MES,
                            IMPORTE=o.IMP_META,
                            ID_GRUPO_ARTICULO = o.ID_GRUPO_ARTICULO,
                            NroRuedas = o.NroRuedas,
                            CANT = o.CANT,
                            NOM_ID_GRUPO_ARTICULO = gr.DES_GRUPO_ARTICULO,
                            MONEDA=m.NOM_MONEDA,
                            ID_MONEDA=o.ID_MONEDA
                        };
                 Globales.lista_Metas_Oficina item = new Globales.lista_Metas_Oficina();
                foreach (var s in q)
                {
                    item.ANIO = s.ANIO;
                    item.CANT = (Int32)s.CANT;
                    item.ID_GRUPO_ARTICULO = s.ID_GRUPO_ARTICULO;
                    item.ID_UBIC_VEND_CAB = s.ID_UBIC_VEND_CAB;
                    item.ID_OFI_VTA = s.ID_OFI_VTA;
                    item.MES = s.MES;
                    item.NOM_OFICINA = s.NOM_OFICINA;
                    item.NroRuedas = s.NroRuedas;
                    item.IMP_META = Convert.ToInt32(s.IMPORTE);
                    item.ID_CANAL_DISTRIB = s.ID_CANAL_DISTRIB;
                    item.NOM_ID_GRUPO_ARTICULO = s.NOM_ID_GRUPO_ARTICULO;
                    item.MONEDA = s.MONEDA;
                    item.ID_MONEDA = s.ID_MONEDA;
                    lista.Add(item);
                }
            return lista;
        }

        public bool Modificar(int id_ubic_cab, int id_canal_distri, int id_ofi_vta, string anio, string mes, int id_grupo_articulo, int cant)
        {

            try
            {
                ContextoDeObjs.ExecuteStoreCommand(String.Format("UPDATE T_VEN_METAS_OFICINA SET CANT={0} WHERE ID_CANAL_DISTRIB={1} and ID_OFI_VTA={2} AND ANIO= {3} AND MES={4} AND ID_GRUPO_ARTICULO={5} AND ID_UBIC_VEND_CAB={6}", cant, id_canal_distri, id_ofi_vta, anio, mes, id_grupo_articulo, id_ubic_cab));
                return true;
            }
            catch
            {
                return false;
            }


        }

        public bool ModificarIMP(int id_ubic_cab, int id_canal_distri, int id_ofi_vta, string anio, string mes, int id_grupo_articulo, decimal imp_meta)
        {

            try
            {
                ContextoDeObjs.ExecuteStoreCommand(String.Format("UPDATE T_VEN_METAS_OFICINA SET IMP_META={0} WHERE ID_CANAL_DISTRIB={1} and ID_OFI_VTA={2} AND ANIO= {3} AND MES={4} AND ID_GRUPO_ARTICULO={5} AND ID_UBIC_VEND_CAB={6}", imp_meta, id_canal_distri, id_ofi_vta, anio, mes, id_grupo_articulo, id_ubic_cab));
                return true;
            }
            catch
            {
                return false;
            }


        }
        
        public bool Insertar(T_VEN_METAS_OFICINA Obj)
        {
            try
            {
                ContextoDeObjs.AddObject("T_VEN_METAS_OFICINA", Obj);
                ContextoDeObjs.SaveChanges();
            }
            catch (Exception)
            {
                return false;
            }
            return true;
        }





        public int BusquedaRegistroExistentes(int ID_UBIC_VEND_CAB, int ID_OFICINA, string ANIO, string MES, int ID_GRUPO_ARTICULO,int ID_CANAL_DISTRIB)
        {
            int cont = 0;

            try
            {



                var q = from c in ContextoDeObjs.T_VEN_METAS_OFICINA
                        where c.ID_UBIC_VEND_CAB == ID_UBIC_VEND_CAB && c.ID_OFI_VTA == ID_OFICINA && c.ANIO == ANIO && c.MES == MES && c.ID_GRUPO_ARTICULO == ID_GRUPO_ARTICULO && c.ID_CANAL_DISTRIB == ID_CANAL_DISTRIB
                        select c;

                cont = q.Count();


            }
            catch { }

            return cont;

        }



        public bool Eliminar(T_VEN_METAS_OFICINA Obj)
        {
            try
            {
                ContextoDeObjs.AttachTo("T_VEN_METAS_OFICINA", Obj);
                ContextoDeObjs.DeleteObject(Obj);
                ContextoDeObjs.SaveChanges();
            }
            catch
            {
                return false;
            }
            return true;
        }











        public bool InsertaReplicacionOficina(int ID_UBIC_VEND_CAB,int ID_CANAL_DISTRIB, int ID_OFICINA, int ID_GRUPO_ARTICULO, string ANIO, string MES, string NroRuedas, int CANT,int? IMP_META,int? ID_MONEDA)
        { 
            ContextoDeObjs.ExecuteStoreCommand("EXEC USP_GUARDAR_T_VEN_METAS_OFICINA @ID_UBIC_VEND_CAB={0},@ID_CANAL_DISTRIB={1},@ID_OFI_VTA={2}, @ID_GRUPO_ARTICULO={3},@ANIO={4},@MES={5},@NRORUEDAS={6},@CANT={7},@IMP_META={8},@ID_MONEDA={9}", ID_UBIC_VEND_CAB, ID_CANAL_DISTRIB,ID_OFICINA, ID_GRUPO_ARTICULO, ANIO, MES, NroRuedas, CANT, IMP_META,ID_MONEDA);
            return true;
        }
    }
}
